Skip to content

Review deck v2 — the approved page, answers file + submit hand-off, rig-measured boxes, rig fixes - #1

Merged
itsdestin merged 31 commits into
masterfrom
feat/review-deck-v2
Aug 27, 2026
Merged

Review deck v2 — the approved page, answers file + submit hand-off, rig-measured boxes, rig fixes#1
itsdestin merged 31 commits into
masterfrom
feat/review-deck-v2

Conversation

@itsdestin

Copy link
Copy Markdown
Owner

Replaces the v1 review deck with the approved page (mockup G), a local server that saves answers to a file and exits when Destin submits, rig-measured highlight boxes, builder-enforced writing rules, and four hand-off rig fixes. Spec: docs/archive/specs/2026-08-27-review-deck-v2-design.md; plan: docs/archive/plans/2026-08-27-review-deck-v2.md.

Part Before After
The page review-cards.py build → generic page, one pulsing ring at a guessed %, Y/N/M keys, copy-paste feedback Same command, new page: app tokens per theme, Before | After with the changed region boxed, headline + What changed / You'll notice / Risk, Yes / No / Other, loupe + zoom, coloured progress, submit dialog
Getting answers back He opens the file; Copy feedback → paste into chat review-cards.py serve builds, serves on 127.0.0.1, opens the browser, writes <spec>.answers.json on every click, exits 0 on Submit with the summary on stdout (Claude runs it in the background — its exit is the notification); wait reads the file alone
Highlight boxes Hand-estimated percentages in the spec The rig measures a named element per shot (measure), or the builder computes the changed region from the Before/After pixels; the spec never carries coordinates
Rig Two sweeps could deadlock on CDP ports; coverage merged by file time; sheets rebuilt for every plan probe-ports.sh refuses loudly; manifests carry a run id and coverage orders by it; sheets rebuilt only for the plans that ran

Tests: 59 Python (unittest, stdlib) + 6 Node (node --test, real headless Chrome) + a bash probe test. Destin ran the deck end to end twice (3-step, then 10-step); the second run found the re-serve-after-submit lock, fixed in 2c42b81.

Deliberate deviations from the spec: no separate crop command (a stale intermediate file is the v1 bug class); wait added; Square:1 dilate; coverage orders by run id instead of discarding older runs; the Phase C rebuild is auto-only and 10 of 13 points.

🤖 Generated with Claude Code

https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x

itsdestin and others added 30 commits August 27, 2026 03:32
…swers server, rig-measured highlights and writing rules

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9Gi6kLrnjb3qPEcZMHnkf
… Phase C deck

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9Gi6kLrnjb3qPEcZMHnkf
…okup, 3×3 dilate, rule-based layout test, coverage orders by run id, no crop command, wait fallback, Destin checkpoint before the full deck

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…r enforces

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…-diff bounding box

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…amps the run id

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…— a late-finishing old shard cannot resurrect a MISSED row

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…s only this sweep's sheets

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…lost in transcription; a pasted ’ over-counted headlines)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…ds the process with the summary; wait reads the file alone

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…p, not nc)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…xes from measurements or pixel diff

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…anged" — a 1 px border gives trim something to shrink from

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…es; a non-JSON POST gets a 400; WHY on shutdown-from-a-thread

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…t inlines it

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…alftone radii now apply), ready only after a real layout, first paint in the first theme, no double-counted seconds, nothing moves after Submit

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
… at three sizes, an answer round-trips to the file

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…dered trim, serve fixes, token specificity, 400 px compact case)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…so a hardcoded midnight would fail it

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…d before the Before run; hand-off gaps closed or filed

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
… N", not "# pass N"

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
… points — two are Before-only, one lacks a Meadow Mist capture)

Copy checked against the crops: the card heights, the featured-border count and the "every card" claim in the plan's example text were wrong and are corrected here; the library-empty crop is taller so the message the headline quotes is in the picture.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…ed numbers

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…failed Submit says so, run-review never orphans its workbench, lock checked before build, Host/Origin guard, same-size guard in diff_bbox, images-folder warning

Also: a sweep with zero MISSED rows no longer exits 1 (grep -c under pipefail); __pycache__ ignored; SKILL.md carries the exit-code contract; README documents `labels`; follow-ups filed in ROADMAP.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…iew — the old answers are kept aside, not loaded as "already submitted"

Destin's second run-through ("I can't click through the pages"): the 10-step deck reused the answers file from the 3-step one, the page saw `submitted` and locked navigation. `serve` now moves a submitted answers file to <stem>.answers.<when>.json before starting, and a page that does load a submitted state shows it as read-only instead of silently ignoring clicks.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…s the dialog to copy/paste, localhost accepted, SIGTERM cleans the lock

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
…ollow them

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W4Kj4r7Vk87Kcb6UrNNp3x
@itsdestin
itsdestin merged commit 1e375d0 into master Aug 27, 2026
1 check failed
@itsdestin
itsdestin deleted the feat/review-deck-v2 branch August 27, 2026 10:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant